package br.com.sisat.persistencia.DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import br.com.sisat.modelo.RelatorioFrequenciaPacienteDTO;
import br.com.sisat.persistencia.conexao.ConnectionProvider;
import br.com.sisat.util.ObjectUtil;

public class RelatorioFrequenciaPacienteDAO {

	private static RelatorioFrequenciaPacienteDAO dao;
	
	public static RelatorioFrequenciaPacienteDAO getInstance(){
		if(ObjectUtil.isEmpty(dao)){
			dao = new RelatorioFrequenciaPacienteDAO();
		}
		return dao;
	}

	public List<RelatorioFrequenciaPacienteDTO> consultar(RelatorioFrequenciaPacienteDTO relFrequenciaPaciente) throws Exception {
		List<RelatorioFrequenciaPacienteDTO> lista = new ArrayList<RelatorioFrequenciaPacienteDTO>();
		String sql = "SELECT consulta.data, consulta.inicio, especialidade.nome espec, pessoa.nome nome_tera, paciente.nome nome_paciente "+
			         " FROM sat.consulta consulta "+
					"   join sat.terapeuta terapeuta on (consulta.id_terapeuta = terapeuta.id_terapeuta) "+
					"      join sat.especialidade especialidade on (terapeuta.id_especialidade = especialidade.id_especialidade)  "+
					"      join sat.pessoa pessoa on (terapeuta.id_pessoa = pessoa.id_pessoa) "+
					"      join sat.pessoa paciente on (consulta.id_pessoa = paciente.id_pessoa) "+
					" 	WHERE  upper(paciente.nome) like upper('"+relFrequenciaPaciente.getNoPaciente()+"%')" +
					" order by consulta.data,consulta.inicio";
		Connection conn = ConnectionProvider.getDefaultConnection();
		PreparedStatement ps = conn.prepareStatement(sql);
		ResultSet rs = ps.executeQuery();
		while(rs.next()){
			RelatorioFrequenciaPacienteDTO rel = new RelatorioFrequenciaPacienteDTO();
			rel.setDtConsulta(rs.getDate("data"));
			rel.setHorario(rs.getString("inicio"));
			rel.setNoEspecialidade(rs.getString("espec"));
			rel.setNoTerapeuta(rs.getString("nome_tera"));
			rel.setNoPaciente(rs.getString("nome_paciente"));
			lista.add(rel);
		}
		ps.close();
		return lista;
	}
	
}
